from rest_framework import permissions


# 定义一个名为 IsOwnerOrReadOnly 的权限类，继承自 BasePermission 类，用于实现对象级权限控制。
class IsOwnerOrReadOnly(permissions.BasePermission):
    # 重写 has_object_permission 方法，这个方法会在用户试图访问某个对象（而非集合）时被调用。
    def has_object_permission(self, request, view, obj):
        # 检查请求的方法是否在 SAFE_METHODS 中。SAFE_METHODS 是 REST 框架定义的一个常量，包含了被认为是安全的HTTP方法，如 GET, HEAD, 和 OPTIONS，这些方法不会改变资源的状态。
        if request.method in permissions.SAFE_METHODS:
            # 如果请求方法是只读的（如 GET 请求），则允许任何用户访问，返回 True。
            return True

        # 如果请求方法不是安全方法（比如 PUT, POST, DELETE 等），则检查请求的用户是否与对象的 owner 字段匹配。
        # 这意味着只有资源的所有者才能执行修改或删除操作。
        return obj.owner == request.user
